﻿using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using StarsAdmin.Core.DB.Entities;

namespace StarsAdmin.Core.DB.Configs
{
    public class RoleConfig : IEntityTypeConfiguration<RoleEntity>
    {
        public void Configure(EntityTypeBuilder<RoleEntity> builder)
        {
            builder.ToTable("T_Roles");
            builder.Property(p => p.Name).IsRequired().HasMaxLength(64);
            builder.Property(p => p.Identifying).IsRequired().HasMaxLength(64);
            builder.Property(p => p.Description).IsRequired(false).HasMaxLength(256);
            // 角色菜单多对多配置
            builder.HasMany(r => r.Menus).WithMany(p => p.Roles).UsingEntity<RoleMenuEntity>(m =>
            {
                m.ToTable("T_RolesMenus");
                // 为 RoleId 和 MenuId 字段添加复合索引
                m.HasIndex(ur => new { ur.RoleId, ur.MenuId }).HasDatabaseName("IX_RoleMenus_RoleId_MenuId");
            });

            // 批量导入添加时简化操作使用，故忽略
            builder.Ignore(p => p.MenuIds);
            builder.Ignore(p => p.UserIds);
        }

        //public void Configure(EntityTypeBuilder<RoleEntity> builder)
        //{
        //    // 基础表结构
        //    builder.ToTable("T_Roles", t => t.HasComment("系统角色主表"));

        //    // 核心字段配置
        //    builder.Property(p => p.Name)
        //        .IsRequired()
        //        .HasMaxLength(64)
        //        .HasComment("角色显示名称");

        //    builder.Property(p => p.Identifying)
        //        .IsRequired()
        //        .HasMaxLength(64)
        //        .IsUnicode(false)
        //        .HasComment("系统权限标识(需唯一)");

        //    // 唯一性约束
        //    builder.HasIndex(r => r.Identifying)
        //        .IsUnique()
        //        .HasDatabaseName("UX_Role_Identifying");

        //    // 多对多配置优化
        //    builder.HasMany(r => r.Menus)
        //        .WithMany(m => m.Roles)
        //        .UsingEntity<RoleMenuEntity>(m =>
        //        {
        //            m.ToTable("T_RolesMenus", t => t.HasComment("角色菜单关联表"));

        //            // 双向复合索引
        //            m.HasIndex(rm => new { rm.RoleId, rm.MenuId })
        //                .HasDatabaseName("IX_RoleMenus_Composite");

        //            // 反向查询优化
        //            m.HasIndex(rm => rm.MenuId)
        //                .IncludeProperties(rm => rm.RoleId)
        //                .HasDatabaseName("IX_RoleMenus_MenuId");
        //        });

        //    // 软删除支持
        //    builder.Property(r => r.IsDeleted)
        //        .HasDefaultValue(false)
        //        .HasComment("软删除标记(0:正常 1:已删除)");

        //    builder.HasQueryFilter(r => !r.IsDeleted);
        //}
    }
}